#include<cstdio>

struct matrix
{
	long long m[35][35];
}index,A;

int mod,N;

matrix mul(matrix a,matrix b)
{
	matrix c;
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
		{
			c.m[i][j]=0;
			for(int k=1;k<=N;k++)
				c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod;
			c.m[i][j]%=mod;
		}
	return c;
}

matrix add(matrix a,matrix b)
{
	matrix c;
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
			c.m[i][j]=(a.m[i][j]+b.m[i][j])%mod;
	return c;
}

matrix quickpow(matrix m,int n)
{
	matrix b=index;
	while(n>0)
	{
		if(n&1)b=mul(b,m);
		n=n>>1;
		m=mul(m,m);
	}
	return b;
}

matrix f(int n)
{
	if(n==1)return A;
	if(n&1)return add(f(n-1),quickpow(A,n));
	return add(f(n/2),mul(f(n/2),quickpow(A,n/2)));
}

void init()
{
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
		{
			scanf("%d",&A.m[i][j]);
			if(i==j)index.m[i][j]=1;
			else index.m[i][j]=0;
		}
}

void print(int m)
{
	matrix ans=f(m);
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<N;j++)
			printf("%d ",ans.m[i][j]);
		printf("%d\n",ans.m[i][N]);
	}
}
int main()
{
	int m;
	scanf("%d%d%d",&N,&m,&mod);
	init();
	print(m);
	return 0;
}
